package com.yfp.group.mapper;

import com.yfp.group.domain.EnterpriseOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yfp.group.domain.EnterpriseOrderCoupon;
import com.yfp.group.domain.EnterpriseOrderCouponInfo;
import com.yfp.group.domain.dto.EnterpriseOrderDTO;
import com.yfp.group.domain.vo.ClientOrderVO;
import com.yfp.group.domain.vo.ComboVO;
import com.yfp.group.domain.vo.EnterpriseOrderVO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @author admin
 * @description 针对表【enterprise_order(企业订单)】的数据库操作Mapper
 * @createDate 2024-08-10 09:41:36
 * @Entity domain.com.yfp.group.EnterpriseOrder
 */
public interface EnterpriseOrderMapper extends BaseMapper<EnterpriseOrder> {

    /**
     * 获取企业用户领取订单详情
     *
     * @param clientId
     * @return
     */
    List<ClientOrderVO> clientOrder(String clientId);

    /**
     * 企业订单列表
     *
     * @param enterpriseOrderDTO
     * @return
     */
    List<EnterpriseOrderVO> enterpriseOrderList(EnterpriseOrderDTO enterpriseOrderDTO);

    /**
     * 获取待支付订单数量
     *
     * @return
     */
    Long countWaitPayOrderByEnterpriseId(Long enterpriseId);

    /**
     * 获取企业订单
     *
     * @param startTime
     * @param endTime
     * @param enterpriseId
     * @return
     */
    List<EnterpriseOrder> selectByDateBetweenAndEnterpriseId(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("enterpriseId") Long enterpriseId);

    /**
     * 获取企业订单
     * doto 今日订单只有一个
     *
     * @param saleTime
     * @param enterpriseId
     * @return
     */
    List<EnterpriseOrder> selectByDateAndEnterpriseId(@Param("saleTime") Date saleTime, @Param("enterpriseId") Long enterpriseId);

    /**
     * 根据订单编号查询订单
     *
     * @param orderSn
     * @return
     */
    EnterpriseOrder selectByOrderSn(String orderSn);

    /**
     * 套餐数据汇总
     *
     * @param enterpriseOrderDTO
     * @return
     */
    List<ComboVO> comboCollect(EnterpriseOrderDTO enterpriseOrderDTO);

    /**
     * 券码管理列表
     *
     * @param enterpriseOrderCoupon
     * @return
     */
    List<EnterpriseOrderCoupon> findEnterpriseOrderCoupon(EnterpriseOrderCoupon enterpriseOrderCoupon);

    /**
     * 券码管理详情
     */
    List<EnterpriseOrderCouponInfo> findEnterpriseOrderCouponInfo(EnterpriseOrderCouponInfo enterpriseOrderCouponInfo);

    /**
     * 更新订单
     *
     * @param enterpriseOrder
     */
    void updateByOrderSn(EnterpriseOrder enterpriseOrder);

    void updateFinishTime(String orderSn);
}